package api

import (
	"fmt"
	"os"
	"path/filepath"
	"strings"
	"sync"

	"replacestring/Type"
)

func GetDir() []string {
	var names []string
	var config Type.Config = ReadConfig()
	file, err := os.ReadDir(config.DirUrl)
	if err != nil {
		fmt.Println(err)
	}
	for _, v := range file {
		if v.IsDir() {
			names = append(names, v.Name())
		}
	}
	return names
}
func GetFile(dir string) []string {
	var files []string
	file, err := os.ReadDir(dir)
	if err != nil {
		fmt.Println(err)
	}
	for _, file := range file {
		if file.IsDir() {
			// 忽略子目录
			continue
		}

		// 判断文件扩展名
		ext := strings.ToLower(filepath.Ext(file.Name()))
		if ext == ReadConfig().Ext {
			files = append(files, file.Name())
		}
	}

	return files
}

func RePlace(url string, target string, replace string, wg *sync.WaitGroup) {

	// 获取文件
	byteStr, err := os.ReadFile(url)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	temp := string(byteStr)
	result := strings.ReplaceAll(temp, target, replace)

	// 写入文件
	file, err2 := os.OpenFile(url, os.O_TRUNC|os.O_WRONLY, 0666)
	if err2 != nil {
		fmt.Println(err2.Error())
		return
	}
	defer file.Close()
	file.WriteString(result)
	wg.Done()
}

func Operate(wg *sync.WaitGroup) {
	// 获取所有文件夹
	dirs := GetDir()
	config := ReadConfig()
	for _, v := range dirs {
		// api.RePlace(config.DirUrl+"\\"+v, config.Target, config.Replace)
		strs := GetFile(config.DirUrl + "\\" + v)
		for _, va := range strs {
			wg.Add(1)
			go RePlace(config.DirUrl+"\\"+v+"\\"+va, config.Target, config.Replace, wg)
		}
	}

}
